/**
 *	@file	pgtel_sub.h
 *	@brief	ポケギア　電話アプリ　サブ
 *	@author	Miyuki Iwasawa
 *	@date	07.10.16
 */
#include "common.h"
#include "system/procsys.h"
#include "system/arc_util.h"
#include "system/arc_tool.h"
#include "system/brightness.h"
#include "system/bmp_list.h"
#include "system/bmp_menu.h"
#include "system/pm_str.h"
#include "system/msgdata.h"
#include "system/fontproc.h"
#include "system/snd_tool.h"
#include "system/clact_util.h"
#include "system/clact_tool.h"
#include "system/render_oam.h"
#include "system/wipe.h"
#include "system/buflen.h"
#include "gflib/touchpanel.h"
#include "field/field_matrix.h"
#include "field/field_place_name.h"
#include "application/app_tool.h"
#include "application/pokegear.h"
#include "msgdata/msg.naix"

#include "../pgear_sys.h"
#include "../pgear_frm.h"
#include "pgtel_sys.h"

#define __PGTEL_SUB_H_GLOBAL
#include "pgtel_sub.h"

static void cbfunc_SelBoxSort(SELBOX_WORK* sbox,u8 cur_pos,void* cb_work,SBOX_CB_MODE mode);
static void cbfunc_SelBox(SELBOX_WORK* sbox,u8 cur_pos,void* cb_work,SBOX_CB_MODE mode);

/**
 *	@brief	電話のタッチからキーへの描画切替
 */
void PGTelSub_ToKeyChange(void* app_wk)
{
	PGTEL_SYS_WORK* wk = (PGTEL_SYS_WORK*)app_wk;

	//タッチから切り替えたら必ずアプリキーモード
	PGTelVList_CursorSet(&wk->vList,0xFF,TRUE);
}

/**
 *	@brief	電話のシステムキーからタッチでアプリに切り替えた際の描画切替
 */
void PGTelSub_ToTouchChange(PGTEL_SYS_WORK* wk)
{
	wk->sys->control = PGCONT_APP;
	//タッチから切り替えたら必ずアプリキーモード
	PGTelVList_CursorSet(&wk->vList,0xFF,TRUE);
	CursorMvMan_SetCursorDrawFlag(wk->sys->curMan,PGKM_SYS_PARAM,FALSE);
}

/**
 *	@brief	電話リストソートモード時のタッチからキーへの描画切替
 */
void PGTelSub_ToKeyChangeSort(void* app_wk)
{
	PGTEL_SYS_WORK* wk = (PGTEL_SYS_WORK*)app_wk;

	PGTelVList_SortCursorSet(&wk->vList,PGTelVList_GetCurrentPos(&wk->vList),TRUE);
}

/**
 *	@brief	電話リストソートモード時のキーからタッチへの描画切替
 */
void PGTelSub_ToTouchChangeSort(void* app_wk)
{
	PGTEL_SYS_WORK* wk = (PGTEL_SYS_WORK*)app_wk;

	PGTelVList_SortCursorSet(&wk->vList,0xFF,TRUE);
}


/**
 *	@brief	電話リストの初期化
 */
void PGTelSub_TelBookListInit(PGTEL_SYS_WORK* wk)
{
	//制御データの初期化
	PGTelVList_Init(wk);

	//初期リスト作成
	PGTelVList_VListMake(wk);

	//初期リスト描画
	PGTelVList_Start(wk,&wk->vList,0,0);
}

///セレクトボックス　ヘッダデータ構造体
static const SELBOX_HEAD_PRM data_sbox_prm = {
	TRUE,SBOX_OFSTYPE_CENTER,	///<ループフラグ、左寄せorセンタリング

	0,	///<項目表示オフセットX座標(dot)

	GF_BGL_FRAME1_M,		///<フレームNo
	SBOX_WPAL,				///<フレームパレットID
	0,0,					///oam BG Pri,Software Pri
	SBOX_FCGX,SBOX_WCGX,	///<ウィンドウcgx,フレームcgx
	SBOX_FCGX_SIZ,		///<BMPウィンドウ占有キャラクタ領域サイズ(char)
};

/*
 *	@brief	セレクトボックスの表示
 *
 *	@param	pos	リストViewの何番目を選んだか？
 *	@param	id	セレクトボックスのリストID
 */
SELBOX_WORK* PGTelSub_SelBoxSet(PGTEL_SYS_WORK* wk,u8 pos,u8 id)
{
	int i;
	u8	key_mode;
	SELBOX_HEADER head;

	//今選んだリストのオフセットを保存
	wk->tmpPos = pos;

	MI_CpuClear8(&head,sizeof(SELBOX_HEADER));

	head.prm = data_sbox_prm;
	head.list = (const BMPLIST_DATA*)wk->slist[id];
	head.bgl = wk->sys->bgl;

	head.count = DATA_PGTelSBoxInitParam[id].menu_ct;

	if(id == SBOX_ID_SORT){
		wk->list_wk = SelectBoxSetEx(wk->sbox,&(head),wk->sys->key_mode,
				DATA_PGTelSBoxInitParam[id].px,DATA_PGTelSBoxInitParam[id].py,
				DATA_PGTelSBoxInitParam[id].width,0,
				cbfunc_SelBoxSort,(void*)wk,TRUE);

	}else{
		wk->list_wk = SelectBoxSetEx(wk->sbox,&(head),wk->sys->key_mode,
				DATA_PGTelSBoxInitParam[id].px,DATA_PGTelSBoxInitParam[id].py,
				DATA_PGTelSBoxInitParam[id].width,0,
				cbfunc_SelBox,(void*)wk,TRUE);
	}

	return wk->list_wk;
}

/**
 *	@brief	セルボックス　ソートメニューのガイド表示コールバック設定
 */
static void cbfunc_SelBoxSort(SELBOX_WORK* sbox,u8 cur_pos,void* cb_work,SBOX_CB_MODE mode)
{
	if(mode != SBOX_CB_MODE_INI){
		Snd_SePlay(SE_PGEAR_DECIDE);
	}
	PGTelSub_ExpWinDraw((PGTEL_SYS_WORK*)(cb_work),MIDX_EXP_SBOX_CB01+cur_pos,TRUE);
}
/**
 *	@brief	セルボックス　メニューのガイド表示コールバック設定
 */
static void cbfunc_SelBox(SELBOX_WORK* sbox,u8 cur_pos,void* cb_work,SBOX_CB_MODE mode)
{
	if(mode != SBOX_CB_MODE_INI){
		Snd_SePlay(SE_PGEAR_DECIDE);
	}
}

/**
 *	@brief	電話リスト選択時の操作説明メッセージ処理
 */
void PGTelSub_ExpWinDraw(PGTEL_SYS_WORK* wk,u8 exp_id,BOOL draw_f)
{
	u32 siz;

	if(draw_f){
		//つぎの操作を選んでくださいメッセージ描画
		GF_BGL_ScrWriteExpand(wk->sys->bgl,GF_BGL_FRAME1_M,
			0,20,32,4,
			wk->pSBg->rawData,0,24,
			wk->pSBg->screenWidth/8,wk->pSBg->screenHeight/8);

		GF_BGL_BmpWinDataFill(&wk->win[WIN_EXP],FCOL_EXPMSG_FILL);
		siz = FontProc_GetPrintStrWidth(FONT_SYSTEM,wk->msgDat.exp[exp_id],0);
		siz = ((BMPL_EXP_SX*8)-siz)/2;
		GF_STR_PrintColor(	&wk->win[WIN_EXP],FONT_SYSTEM,
							wk->msgDat.exp[exp_id],
							siz,0,MSG_ALLPUT,FCOL_EXPMSG,NULL );
	}else{
		GF_BGL_BmpWinOffVReq(&wk->win[WIN_EXP]);
		GF_BGL_ScrFill(wk->sys->bgl,GF_BGL_FRAME1_M,0x00,0,20,32,4,GF_BGL_SCRWRT_PALIN);
	}
	GF_BGL_LoadScreenV_Req(wk->sys->bgl,GF_BGL_FRAME1_M);
}

/**
 *	@brief	他処理から電話リストの選択seqに戻るときの復帰処理
 */
void PGTelSub_ResetListStatus(PGTEL_SYS_WORK* wk)
{
	PGTelVList_LineRewriteNormal(&wk->vList);
	PGTelVList_CursorAnimeSet(&wk->vList,TRUE);

	PGTelSub_ToKeyChange((void*)wk);
}
